package co.gov.medellin.sdep.sisdep.common;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * Clase que pemite obtener una referencia al Spring Application Context desde otras clases Java.
 * Este contexto es inicializado durante el inicio de la aplicacion WEB.
 * 
 * @author carlos.perez@consult-soft.com
 * @version 19-04-2012
 */
public class SpringAppContext implements ApplicationContextAware {

  private static ApplicationContext CONTEXT;

  /**
   * Este metodo es llamado para inicializar la referencia al ApplicationContext de Spring.
   * @param context ApplicationContext.
   */
  public void setApplicationContext(ApplicationContext context) throws BeansException {
    CONTEXT = context;
  }

  /**
   * 
   * Este metodo permite la obtencion de un SpringBean por medio de su ID, su invocacion es
   * estatica y se debe realizar el cast hacia la clase o interfaz apropiada. 
   * Finalmente en caso de NO estar definido el SpringBean solicitado se lanza un Runtime error.
   * 
   * @param beanName nombre del bean a obtener.
   * @return una referencia del tipo de objeto solicitado.
   */
  public static Object getBean(String beanName) {
    return CONTEXT.getBean(beanName);
  }
}